class MyCircularQueue {
//循环队列的实现
    public int front;
    public int rear;
    public int[] elem;
    public int usedSize;
    public MyCircularQueue(int k) {
        elem = new int[k];
    }

    //入队列
    public boolean enQueue(int value) {
        if (isFull()){
            return false;
        }else{
            elem[rear] = value;
            rear = (rear + 1) % elem.length;
            return true;
        }
    }
    //从循环队列中删除一个元素。如果成功删除则返回真-->从队列头出队列
    public boolean deQueue() {
        if (isEmpty()){
            return false;
        }else{
            front = (front + 1) % elem.length;
            return true;
        }
    }
    //从队首获取元素。如果队列为空，返回-1。
    public int Front() {
        if (isEmpty()){
            return -1;
        }else{
            return elem[front];
        }
    }
    // 获取队尾元素。如果队列为空，返回 -1 。
    public int Rear() {
        if (isEmpty()){
            return -1;
        }else{
            int index = (rear == 0) ? elem.length - 1 : rear - 1;
            return elem[index];
//            if (rear == 0){
//                return elem[elem.length-1];
//            }else {
//                return elem[rear - 1];
//            }
        }
    }
    
    public boolean isEmpty() {
        return rear == front;
    }
    
    public boolean isFull() {
        //这里规定在循环队列还剩一个元素空间的时候为满
        return (rear + 1) % elem.length == front;
    }
}